package br.com.quinn.enccontre.domain;

import java.io.Serializable;
import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.quinn.enccontre.enumeration.TipoEstadoCivil;
import br.com.quinn.enccontre.enumeration.TipoFamiliar;
import br.com.quinn.enccontre.enumeration.TipoSanguineo;

/***
 * Representa a entidade responsavel por persistir a configuracao basica de uma contacto. (REFATORAR)
 *  
 * @author     Quinn
 * @version    Release 01
 * @date       04/03/2015 (14 de ADAR de 5775)    
 */

//TODO REFATORAR A ENTIDADE CONFIGURACONTATO.
@Entity
@Table(name = "TB_CONFIGURA_CONTATO")
public class ConfiguraContacto implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private Long codigo;
	
	@Column(name = "NOME", length = 80, nullable = false)
	private String nome;
	
	@Column(name = "NUMERO_IDENTIDADE", length = 20, nullable = true)
	private String numeroIdentidade;
	
	@Column(name = "CPF", length = 14, nullable = true)
	private String cpf;
	
	@Column(name = "APELIDO", length = 80, nullable = true)
	private String apelido;
	
	@Column(name = "NOME_PAI", length = 80, nullable = true)
	private String nomePai;
	
	@Column(name = "NOME_MAE", length = 80, nullable = true)
	private String nomeMae;
	
	@Column(name = "DATA_NASCIMENTO", nullable = true)
	@Temporal(TemporalType.DATE)
	private Calendar dataNascimento;
	
	@Column(name = "GRAU_INSTRUCAO", length = 80, nullable = true)
	private String grauInstrucao;

	@Column(name = "GRAU_NACIONALIDADE", length = 80, nullable = true)
	private String nacionalidade;
	
	@Column(name = "NATURALIDADE", length = 80, nullable = true)
	private String naturalidade;
	
	@Column(name = "ESTADO_CIVIL", nullable = true)
	@Enumerated(EnumType.STRING)
	private TipoEstadoCivil estadoCivil;
	
	@Column(name = "ALTURA", scale = 10, precision = 2, nullable = true)
	private Double altura;
	
	@Column(name = "PESO", scale = 10, precision = 2, nullable = true)
	private Double peso;
	
	@Column(name = "COR_OLHOS", length = 80, nullable = true)
	private String corOlhos;
	
	@Column(name = "COR_CABELOS", length = 80, nullable = true)
	private String corCabelos;
	
	@Column(name = "NOME_PELE", length = 80, nullable = true)
	private String corPele;
	
	@Column(name = "SINAIS_CORPO", length = 80, nullable = true)
	private String sinaisCorpo;
	
	@Column(name = "FOTOGRAFIA", length = 80, nullable = true)
	private String fotografia;
	
	@Column(name = "DATA_CADASTRO", nullable = true)
	@Temporal(TemporalType.DATE)
	private Calendar dataCadastro;
	
	@Column(name = "TIPO_FAMILIAR", nullable = true)
	@Enumerated(EnumType.STRING)
	private TipoFamiliar tipoFamiliar;
	
	@Column(name = "TIPO_SANGUINEO", nullable = true)
	@Enumerated(EnumType.STRING)
	private TipoSanguineo tipoSanguineo;
	
	@Column(name = "CATEGORIA_CONTATO", length = 80, nullable = true)
	private String categoriaContacto;
	
	@Column(name = "TELEFONE", length = 11, nullable = true)
	private String telefone;
	
	public ConfiguraContacto() {
	}
	
	public ConfiguraContacto(Long codigo, String nome) {
		this.codigo = codigo;
		this.nome = nome;
	}
	
	public ConfiguraContacto(Long codigo, String nome, String numeroIdentidade,
			String cpf, String apelido, String nomePai, String nomeMae,
			Calendar dataNascimento, String grauInstrucao,
			String nacionalidade, String naturalidade, TipoEstadoCivil estadoCivil,
			Double altura, Double peso, String corOlhos, String corCabelos,
			String corPele, String sinaisCorpo, String fotografia,
			Calendar dataCadastro, TipoFamiliar tipoFamiliar,
			TipoSanguineo tipoSanguineo) {
		this.codigo = codigo;
		this.nome = nome;
		this.numeroIdentidade = numeroIdentidade;
		this.cpf = cpf;
		this.apelido = apelido;
		this.nomePai = nomePai;
		this.nomeMae = nomeMae;
		this.dataNascimento = dataNascimento;
		this.grauInstrucao = grauInstrucao;
		this.nacionalidade = nacionalidade;
		this.naturalidade = naturalidade;
		this.estadoCivil = estadoCivil;
		this.altura = altura;
		this.peso = peso;
		this.corOlhos = corOlhos;
		this.corCabelos = corCabelos;
		this.corPele = corPele;
		this.sinaisCorpo = sinaisCorpo;
		this.fotografia = fotografia;
		this.dataCadastro = dataCadastro;
		this.tipoFamiliar = tipoFamiliar;
		this.tipoSanguineo = tipoSanguineo;
	}
	
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNumeroIdentidade() {
		return numeroIdentidade;
	}
	public void setNumeroIdentidade(String numeroIdentidade) {
		this.numeroIdentidade = numeroIdentidade;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getApelido() {
		return apelido;
	}
	public void setApelido(String apelido) {
		this.apelido = apelido;
	}
	public String getNomePai() {
		return nomePai;
	}
	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}
	public String getNomeMae() {
		return nomeMae;
	}
	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}
	public Calendar getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	public String getGrauInstrucao() {
		return grauInstrucao;
	}
	public void setGrauInstrucao(String grauInstrucao) {
		this.grauInstrucao = grauInstrucao;
	}
	public String getNacionalidade() {
		return nacionalidade;
	}
	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}
	public String getNaturalidade() {
		return naturalidade;
	}
	public void setNaturalidade(String naturalidade) {
		this.naturalidade = naturalidade;
	}
	public Double getAltura() {
		return altura;
	}
	public void setAltura(Double altura) {
		this.altura = altura;
	}
	public Double getPeso() {
		return peso;
	}
	public void setPeso(Double peso) {
		this.peso = peso;
	}
	public String getCorOlhos() {
		return corOlhos;
	}
	public void setCorOlhos(String corOlhos) {
		this.corOlhos = corOlhos;
	}
	public String getCorCabelos() {
		return corCabelos;
	}
	public void setCorCabelos(String corCabelos) {
		this.corCabelos = corCabelos;
	}
	public String getCorPele() {
		return corPele;
	}
	public void setCorPele(String corPele) {
		this.corPele = corPele;
	}
	public String getSinaisCorpo() {
		return sinaisCorpo;
	}
	public void setSinaisCorpo(String sinaisCorpo) {
		this.sinaisCorpo = sinaisCorpo;
	}
	public String getFotografia() {
		return fotografia;
	}
	public void setFotografia(String fotografia) {
		this.fotografia = fotografia;
	}
	public Calendar getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(Calendar dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public TipoFamiliar getTipoFamiliar() {
		return tipoFamiliar;
	}
	public void setTipoFamiliar(TipoFamiliar tipoFamiliar) {
		this.tipoFamiliar = tipoFamiliar;
	}
	public TipoSanguineo getTipoSanguineo() {
		return tipoSanguineo;
	}
	public void setTipoSanguineo(TipoSanguineo tipoSanguineo) {
		this.tipoSanguineo = tipoSanguineo;
	}
	
	public TipoEstadoCivil getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(TipoEstadoCivil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public String getCategoriaContacto() {
		return categoriaContacto;
	}

	public void setCategoriaContacto(String categoriaContacto) {
		this.categoriaContacto = categoriaContacto;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		return result;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ConfiguraContacto other = (ConfiguraContacto) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		return true;
	}
	
	@Override
	public String toString() {
		return "ConfiguraContacto [codigo=" + codigo + "]";
	}
}

